package kr.hkit.powerjava.chapter24.work;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class StudentDAO implements InterfaceDAO<Student>{
	private static final String FILE = "stdList.data";	//파일명
	private ArrayList<Student> arList;
	
	public StudentDAO() {
		loadList();
	}
	@Override
	public void insertItem(Student item) {
		arList.add(item);
	}
	@Override
	public void delectItem(Student item) {
		arList.remove(item);
	}
	@Override
	public void updateItem(Student item) {
		arList.set(arList.indexOf(item), item);
	}
	@Override
	public void prnItem() {
		for(Student std : arList) {
			System.out.println(std);
		}
	}
	
	public void prnItem(ArrayList<Student> list) {
		for(Student std : list) {
			System.out.println(std);
		}
	}
	@Override
	public Student searchItem(Student item) {
		if(arList.contains(item)) {
			return arList.get(arList.indexOf(item));
		} else {
			return null;
		}
	}
	@Override
	public void loadList() { //파일내용 불러오기
		ObjectInputStream ois  = null;
		try {
			ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(StudentDAO.FILE)));
			arList = (ArrayList<Student>) ois.readObject();
			
		} catch (Exception e) {
			File file = new File(StudentDAO.FILE);	//파일생성
			try {
				file.createNewFile();		
				arList = new ArrayList<>();	
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			//System.err.println(e);
		} finally {
			if(ois != null) try{ois.close();} catch(Exception e) {}
		}
	}
	@Override
	public void saveList() {
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(StudentDAO.FILE)));
			oos.writeObject(arList);
			oos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(oos != null) try{oos.close();} catch(Exception e) {}
		}
	}
}